# -*- coding: utf-8 -*-
from django.db import models
from django.core.exceptions import ValidationError
from django.contrib.auth.models import User

def validar_numerico(cifra):
    for c in cifra:
        if not c.isdigit():
            raise ValidationError(u'No es valor numérico válido')

class Genero (models.Model):
    codigo = models.CharField(max_length = 1)
    nombre = models.CharField(max_length = 20)
    
    def __unicode__(self):
        return self.nombre

class EstadoSolicitud (models.Model):
    codigo = models.CharField(max_length = 1)
    nombre = models.CharField(max_length = 20)
    
    class Meta:
        verbose_name_plural = 'Estado Solicitudes'
        
    def __unicode__(self):
        return self.nombre

class UnidadTiempo(models.Model):
    codigo = models.CharField(max_length = 1)
    nombre = models.CharField(max_length = 20)
    
    def __unicode__(self):
        return self.nombre

class TipoDocumento (models.Model):
    codigo = models.CharField(max_length = 3)
    nombre = models.CharField(max_length = 70)
    abreviatura = models.CharField(max_length = 8)
    
    def __unicode__(self):
        return self.nombre


class TipoCampo (models.Model):
    etiqueta = models.CharField(max_length = 50)
    tipo = models.CharField(max_length = 50, null=True)
    descripcion = models.CharField(max_length = 50, null=True)
    
    def __unicode__(self):
        return self.descripcion


class Departamento (models.Model):
    codigo = models.CharField(max_length = 2)
    nombre = models.CharField(max_length = 200)
    
    def __unicode__(self):
        return self.nombre

class TaxonomiaCampo (models.Model):
    codigo = models.CharField(max_length = 2)
    nombre = models.CharField(max_length = 200)
    
    def __unicode__(self):
        return self.nombre

class Municipio (models.Model):
    departamento = models.ForeignKey(Departamento)
    codigo = models.CharField(max_length = 5)
    nombre = models.CharField(max_length = 200)
    
    def __unicode__(self):
        return self.nombre

   

class Formulario(models.Model):
    empresa = models.ForeignKey(User, verbose_name='Empresa', blank=True, default=1)
    codigo = models.CharField(max_length=200, verbose_name='Cóigo de formulario', blank=True, null=True)
    titulo = models.CharField(max_length=200, verbose_name='Título de formulario', help_text='Nombre del formulario')
    descripcion = models.TextField(max_length=500, verbose_name='Descripción', help_text='Para qué sirve el formulario', blank=True, null=True)
    palabras_clave = models.CharField(max_length=200, help_text='Indique las palabras clave separadas por coma.', blank=True, null=True)
    publicado = models.BooleanField(help_text='Indica si el formulario se encuentra publicado.', blank=True)
    fecha_creacion = models.DateField(verbose_name='Fecha de creación', blank=True, null=True)
    fecha_publicacion = models.DateField(verbose_name='Fecha de publicacién', help_text='Indica la fecha desde la cual el formulario estará visible', blank=True, null=True)
    fecha_vencimiento = models.DateField(verbose_name='Fecha de vencimiento', help_text='Indica la fecha hasta la cual el formulario estará visible', blank=True, null=True)
    duracion = models.IntegerField(verbose_name='duración', blank=True, null=True)
    unidad_tiempo = models.ForeignKey(UnidadTiempo, blank=True, null=True)
    
    def __unicode__(self):
        return u'%s' % self.titulo
    
    def nombre_empresa(self):
        return self.empresa.first_name 
    
    
class FormularioCampos(models.Model):
    empresa = models.ForeignKey(User, verbose_name='Empresa', blank=True, default=1)
    formulario = models.ForeignKey(Formulario, verbose_name='Formulario', blank=True, default=1)
    taxonomia = models.ForeignKey(TaxonomiaCampo, verbose_name='Taxonomía campo', blank=True, default=1)
    etiqueta = models.CharField(max_length=100, help_text='Etiqueta del campo')
    ayuda = models.TextField(max_length=200, help_text='Texto de ayuda para el campo', blank=True, null=True)
    tipo_campo = models.ForeignKey(TipoCampo, verbose_name='Tipo de campo', default=1)
    obligatorio = models.BooleanField(help_text='Indique si el campo es obligatorio.', blank=True)
    orden = models.IntegerField(help_text='Indique el orden en que aparecerá el campo en el formulario.', blank=True, null=True)
    validaciones = models.CharField(max_length=200, blank=True, null=True)
    
    def __unicode__(self):
        return u'%s' % self.etiqueta


class Solicitud(models.Model):
    empresa = models.ForeignKey(User, blank=True, default=1, related_name='empresa_user')
    formulario = models.ForeignKey(Formulario, blank=True, default=1)
    persona = models.ForeignKey(User, blank=True, default=1, related_name='persona_user')
    fecha_solicitud = models.DateField(verbose_name='Fecha de solicitud')
    estado = models.ForeignKey(EstadoSolicitud, verbose_name='Estado de solicitud')
    observacion = models.TextField(verbose_name='Observación', help_text='Observaciones sobre el estado de solicitud', null=True)
    
    def __unicode__(self):
        return u'%s' % self.id
    
    class Meta:
        verbose_name_plural = 'Solicitudes'

class SolicitudCampos(models.Model):
    solicitud = models.ForeignKey(Solicitud, blank=True, default=1)
    formulario_campos = models.ForeignKey(FormularioCampos, blank=True, default=1)
    contenido = models.CharField(max_length=200, blank=True, default=1, null=True)
    
    def __unicode__(self):
        return u'%s' % self.id